/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.entidade.protocolo;

import br.com.deployment.entidade.acesso.Usuario;
import br.com.deployment.entidade.empresa.Cartorio;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;

/**
 *
 * @author roniere
 */
@Entity
public class Lancamento implements Serializable{
    
    @Id
    @SequenceGenerator(name = "seq_lancamento", sequenceName = "seq_lancamento", allocationSize=1 )
    @GeneratedValue(generator = "seq_lancamento", strategy = GenerationType.SEQUENCE)
    private int id;
    
    @Temporal(javax.persistence.TemporalType.DATE)
    @NotNull
    private Date dataLanc;
    
    @OneToMany
    private List<Protocolo> credito;
    
    @OneToMany
    private List<Pagamento> debito;
    
    @Column(scale= 2, precision=19)
    @NotNull
    @DecimalMin( value = "0.00" )
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal valorCartorio;
    
    @Column(scale= 2, precision=19)
    @NotNull
    @DecimalMin( value = "0.00" )
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal valorFermojupi;
    
    @Column(scale= 2, precision=19)
    @NotNull
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal valorDescont;

    @OneToOne
    @NotNull
    private Usuario recebedor;
    
    @OneToOne
    @NotNull
    private Usuario prestador;
    
    @OneToOne
    private Cartorio cartorio;

    public Cartorio getCartorio() {
        return cartorio;
    }

    public void setCartorio(Cartorio cartorio) {
        this.cartorio = cartorio;
    }

    public List<Protocolo> getCredito() {
        return credito;
    }

    public void setCredito(List<Protocolo> credito) {
        this.credito = credito;
    }

    public List<Pagamento> getDebito() {
        return debito;
    }

    public void setDebito(List<Pagamento> debito) {
        this.debito = debito;
    }
    
    

    public Usuario getPrestador() {
        return prestador;
    }

    public void setPrestador(Usuario prestador) {
        this.prestador = prestador;
    }

    public Usuario getRecebedor() {
        return recebedor;
    }

    public void setRecebedor(Usuario recebedor) {
        this.recebedor = recebedor;
    }
    
    
    
    public Date getDataLanc() {
        return dataLanc;
    }

    public void setDataLanc(Date dataLanc) {
        this.dataLanc = dataLanc;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List<Pagamento> getPagamentos() {
        return debito;
    }

    public void setPagamentos(List<Pagamento> pagamentos) {
        this.debito = pagamentos;
    }

    public List<Protocolo> getProtocolos() {
        return credito;
    }

    public void setProtocolos(List<Protocolo> protocolos) {
        this.credito = protocolos;
    }

    public BigDecimal getValorCartorio() {
        return valorCartorio;
    }

    public void setValorCartorio(BigDecimal valorCartorio) {
        this.valorCartorio = valorCartorio;
    }

    public BigDecimal getValorDescont() {
        return valorDescont;
    }

    public void setValorDescont(BigDecimal valorDescont) {
        this.valorDescont = valorDescont;
    }

    public BigDecimal getValorFermojupi() {
        return valorFermojupi;
    }

    public void setValorFermojupi(BigDecimal valorFermojupi) {
        this.valorFermojupi = valorFermojupi;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Lancamento other = (Lancamento) obj;
        if (this.id != other.id) {
            return false;
        }
        if (this.dataLanc != other.dataLanc && (this.dataLanc == null || !this.dataLanc.equals(other.dataLanc))) {
            return false;
        }
        if (this.credito != other.credito && (this.credito == null || !this.credito.equals(other.credito))) {
            return false;
        }
        if (this.debito != other.debito && (this.debito == null || !this.debito.equals(other.debito))) {
            return false;
        }
        if (this.valorCartorio != other.valorCartorio && (this.valorCartorio == null || !this.valorCartorio.equals(other.valorCartorio))) {
            return false;
        }
        if (this.valorFermojupi != other.valorFermojupi && (this.valorFermojupi == null || !this.valorFermojupi.equals(other.valorFermojupi))) {
            return false;
        }
        if (this.valorDescont != other.valorDescont && (this.valorDescont == null || !this.valorDescont.equals(other.valorDescont))) {
            return false;
        }
        if (this.recebedor != other.recebedor && (this.recebedor == null || !this.recebedor.equals(other.recebedor))) {
            return false;
        }
        if (this.prestador != other.prestador && (this.prestador == null || !this.prestador.equals(other.prestador))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 89 * hash + this.id;
        hash = 89 * hash + (this.dataLanc != null ? this.dataLanc.hashCode() : 0);
        hash = 89 * hash + (this.credito != null ? this.credito.hashCode() : 0);
        hash = 89 * hash + (this.debito != null ? this.debito.hashCode() : 0);
        hash = 89 * hash + (this.valorCartorio != null ? this.valorCartorio.hashCode() : 0);
        hash = 89 * hash + (this.valorFermojupi != null ? this.valorFermojupi.hashCode() : 0);
        hash = 89 * hash + (this.valorDescont != null ? this.valorDescont.hashCode() : 0);
        hash = 89 * hash + (this.recebedor != null ? this.recebedor.hashCode() : 0);
        hash = 89 * hash + (this.prestador != null ? this.prestador.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "Lancamento{" + "id=" + id + ", dataLanc=" + dataLanc + ", protocolos=" + credito + ", pagamentos=" + debito + ", valorCartorio=" + valorCartorio + ", valorFermojupi=" + valorFermojupi + ", valorDescont=" + valorDescont + ", recebedor=" + recebedor + ", prestador=" + prestador + '}';
    }
    
    
}
